#include <vector>
#include <iostream>

class Widget {
    std::vector<int> data;

public:
    void updateData(const std::vector<int>& newData) {
        std::vector<int> tempData = newData; // 拷贝新数据
        data.swap(tempData); // 交换旧数据和新数据
        // 如果上面的操作抛出异常，旧数据依然保持不变，因此符合异常安全
    }
};

int main() {
    Widget w;
    try {
        std::vector<int> newData = {1, 2, 3, 4};
        w.updateData(newData);
    } catch (const std::exception& e) {
        std::cout << "Exception caught: " << e.what() << std::endl;
    }
}